﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBM.Data.DB2.iSeries;
using System.Data;

namespace Unimaq.FacturaDBS_Spring.ADO.Version2.DBS
{
    public class DBS_DetalleADO
    {
        public List<Entidades.Version2.DBS.DBS_Detalle> Listar_Detalle_AS400(Util.ContextoDBAS400 ctx, DateTime fechaEmisionInicio, DateTime fechaEmisionFin)
        {
            iDB2Command cmd =
                new iDB2Command(
                    string.Format(
                        "SELECT "+
                            "CAB.TIPREG, CAB.CORP, CAB.CIA, CAB.OFIC, CAB.ANODOC, CAB.TIPDOC, CAB.NUMORI, CAB.NUMPAG,"+
                            "CAB.SUNTIP, CAB.SUNPRE, CAB.SUNNUM," +
                            "CAB.CENCOS as \"CABCENCOS\", CAB.FECEMI,  CAB.TIPFORM, CAB.VAVTA1," +
                            "CAB.VALAF16, CAB.IMPOR16,"+
	                        "CAB.MONEDA, CAB.TIPCAM, "+
	                        "CAB.ECODE1, CAB.ECODE2, CAB.ECODE3,"+
	                        "DET.NUMSEC, "+
	                        "DET.ACCION, DET.LINEAD,"+ 
	                        "DET.IMPORTE, DET.CENCOS, DET.ENCODE, DET.FILL01 "+
                        "FROM LIBR09.UFPFAHD0 CAB "+
                        "LEFT OUTER JOIN LIBR09.UFPFADT0 DET "+
                        //"INNER JOIN LIBR09.UFPFADT0 DET "+
	                        "ON ("+
		                        "DET.TIPREG = CAB.TIPREG AND "+
		                        "DET.CORP = CAB.CORP AND "+
		                        "DET.CIA = CAB.CIA AND "+
		                        "DET.OFIC = CAB.OFIC AND "+
		                        "DET.ANODOC = CAB.ANODOC AND "+
		                        "DET.TIPDOC = CAB.TIPDOC AND "+
		                        "DET.NUMORI = CAB.NUMORI AND "+
		                        "DET.NUMPAG = CAB.NUMPAG"+
		                        ") "+
                        "WHERE "+
                        "(CAB.FECEMI >= '{0}' AND CAB.FECEMI <= '{1}') AND "+
                        "(CAB.SUNPRE <> 0 AND CAB.SUNNUM <> 0)",
                        fechaEmisionInicio.ToString("yyyyMMdd"),
                        fechaEmisionFin.ToString("yyyyMMdd"))
                    , ctx.GetConexion(), ctx.GetTx());

            DataTable dtResult = new DataTable();
            dtResult.Load(cmd.ExecuteReader());

            List<Entidades.Version2.DBS.DBS_Detalle> result = new List<Entidades.Version2.DBS.DBS_Detalle>();

            foreach (DataRow fila in dtResult.Rows)
            {
                Entidades.Version2.DBS.DBS_Detalle dbs_Detalle = new Entidades.Version2.DBS.DBS_Detalle();

                dbs_Detalle.Tipreg = fila["TIPREG"].ToString();
                dbs_Detalle.Corp = decimal.Parse(fila["CORP"].ToString());
                dbs_Detalle.Cia = decimal.Parse(fila["CIA"].ToString());
                dbs_Detalle.Ofic = decimal.Parse(fila["OFIC"].ToString());
                dbs_Detalle.Anodoc = decimal.Parse(fila["ANODOC"].ToString());
                dbs_Detalle.Tipdoc = fila["TIPDOC"].ToString();
                dbs_Detalle.Numori = fila["NUMORI"].ToString();
                dbs_Detalle.Numpag = int.Parse(fila["NUMPAG"].ToString());

                dbs_Detalle.Suntip = fila["SUNTIP"].ToString();
                dbs_Detalle.Sunpre = decimal.Parse(fila["SUNPRE"].ToString());
                dbs_Detalle.Sunnum = decimal.Parse(fila["SUNNUM"].ToString());
                dbs_Detalle.Cencos = fila["CABCENCOS"].ToString();
                dbs_Detalle.Fecemi = fila["FECEMI"].ToString();                
                dbs_Detalle.Tipform = fila["TIPFORM"].ToString();
                dbs_Detalle.Vavta1 = decimal.Parse(fila["VAVTA1"].ToString());
                dbs_Detalle.Valaf16 = decimal.Parse(fila["VALAF16"].ToString());
                dbs_Detalle.Impor16 = decimal.Parse(fila["IMPOR16"].ToString());
                dbs_Detalle.Moneda = fila["MONEDA"].ToString();
                dbs_Detalle.Tipcam = decimal.Parse(fila["TIPCAM"].ToString());                
                dbs_Detalle.Ecode1 = fila["ECODE1"].ToString();
                dbs_Detalle.Ecode2 = fila["ECODE2"].ToString();
                dbs_Detalle.Ecode3 = fila["ECODE3"].ToString();
                dbs_Detalle.Numsec = decimal.Parse(fila["NUMSEC"].ToString());                                
                dbs_Detalle.Accion = fila["ACCION"].ToString();
                dbs_Detalle.Linead = fila["LINEAD"].ToString();
                dbs_Detalle.Importe = decimal.Parse(fila["IMPORTE"].ToString());
                dbs_Detalle.DetCencos = fila["CENCOS"].ToString();
                dbs_Detalle.Encode = fila["ENCODE"].ToString();
                dbs_Detalle.Fill01 = fila["FILL01"].ToString();

                result.Add(dbs_Detalle);
            }

            return result;
        }
    }
}
